//package com.quick.android.handler.http;
//
//import java.io.IOException;
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.Map;
//
//import org.apache.http.HttpEntity;
//import org.apache.http.HttpResponse;
//import org.apache.http.HttpStatus;
//import org.apache.http.HttpVersion;
//import org.apache.http.client.ClientProtocolException;
//import org.apache.http.client.HttpClient;
//import org.apache.http.client.methods.HttpGet;
//import org.apache.http.client.methods.HttpPost;
//import org.apache.http.client.methods.HttpUriRequest;
//import org.apache.http.conn.params.ConnManagerParams;
//import org.apache.http.conn.scheme.PlainSocketFactory;
//import org.apache.http.conn.scheme.Scheme;
//import org.apache.http.conn.scheme.SchemeRegistry;
//import org.apache.http.conn.ssl.SSLSocketFactory;
//import org.apache.http.impl.client.DefaultHttpClient;
//import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
//import org.apache.http.params.BasicHttpParams;
//import org.apache.http.params.HttpConnectionParams;
//import org.apache.http.params.HttpProtocolParams;
//import org.apache.http.protocol.BasicHttpContext;
//import org.apache.http.protocol.HttpContext;
//import org.apache.http.protocol.SyncBasicHttpContext;
//import org.apache.http.util.EntityUtils;
//
//import com.quick.android.handler.http.HttpClientRequest.Method;
//import com.quick.android.handler.http.impl.OnResponseListener;
//import com.quick.android.task.AsyncTask;
//
//import android.content.Context;
//import android.os.Environment;
//
//@SuppressWarnings("deprecation")
//public class HttpClientHandler {
//	private static HttpClientHandler instance = new HttpClientHandler();
//	private static final int DEFAULT_SOCKET_BUFFER_SIZE = 8 * 1024; // 8KB
//	private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";
//	private static final String ENCODING_GZIP = "gzip";
//
//	private static int maxConnections = 10; // http请求最大并发连接数
//	private static int socketTimeout = 10 * 1000; // 超时时间，默认10秒
//	public static String ENCODE = "UTF-8";
//	public static String TAG = "HttpClientHandler";
//	public static HttpClient mHttpClient;
//	private static HttpContext mHttpContext;
//	private Map<String, String> mHeader;
//
//	public static HttpClientHandler getInstance() {
//		return instance;
//	}
//
//	private HttpClientHandler() {
//		initHttpClient();
//	}
//
//	/**
//	 * 初始化httpclient并进行参数配置
//	 */
//	private void initHttpClient() {
//		BasicHttpParams httpParams = new BasicHttpParams();
//		ConnManagerParams.setTimeout(httpParams, socketTimeout);
//		// ConnManagerParams.setMaxConnectionsPerRoute(httpParams,
//		// new ConnPerRouteBean(maxConnections));
//		ConnManagerParams.setMaxTotalConnections(httpParams, 10);
//
//		HttpConnectionParams.setSoTimeout(httpParams, socketTimeout);
//		HttpConnectionParams.setConnectionTimeout(httpParams, socketTimeout);
//		HttpConnectionParams.setTcpNoDelay(httpParams, true);
//		HttpConnectionParams.setSocketBufferSize(httpParams,
//				DEFAULT_SOCKET_BUFFER_SIZE);
//
//		HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);
//
//		SchemeRegistry schemeRegistry = new SchemeRegistry();
//		schemeRegistry.register(new Scheme("http", PlainSocketFactory
//				.getSocketFactory(), 80));
//		schemeRegistry.register(new Scheme("https", SSLSocketFactory
//				.getSocketFactory(), 443));
//		ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(
//				httpParams, schemeRegistry);
//
//		mHttpContext = new SyncBasicHttpContext(new BasicHttpContext());
//		mHttpClient = new DefaultHttpClient(cm, httpParams);
//		initHeader();
//	}
//
//	/** 初始化http头部 */
//	private void initHeader() {
//		mHeader = new HashMap<String, String>();
//		addHeader("Connection", "keep-alive");
//		addHeader("Accept-Charset", "utf-8");
//		addHeader("User-Agent",
//				"Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
//	}
//
//	/** 添加http头部 */
//	public void addHeader(String key, String value) {
//		mHeader.put(key, value);
//	}
//
//	/**
//	 * 发送get请求
//	 * 
//	 * @param url
//	 *            请求api的链接
//	 * @param header
//	 *            请求上传头部信息
//	 * @param params
//	 *            上传的参数
//	 * @param listener
//	 *            回调监听函数
//	 */
//	public void sendAsyncGet(String url, HttpParams httpParams,
//			OnResponseListener<String> listener) {
//		sendAsyncRequest(Method.get, url, httpParams, listener);
//	}
//
//	/**
//	 * 发送post请求
//	 * 
//	 * @param url
//	 *            api数据链接
//	 * @param header
//	 *            上传数据的头部信息
//	 * @param params
//	 *            上传的参数
//	 * @param listener
//	 *            回调监听函数
//	 */
//	public void sendAsyncPost(String url, HttpParams params,
//			OnResponseListener<String> listener) {
//		sendAsyncRequest(Method.post, url, params, listener);
//	}
//
//	/**
//	 * 上传文件请求
//	 * 
//	 * @param url
//	 *            api数据链接
//	 * @param header
//	 *            上传数据的头部信息
//	 * @param params
//	 *            上传的参数
//	 * @param files
//	 *            上传的文件
//	 * @param listener
//	 *            回调监听函数
//	 */
//	public void sendAsyncUpload(String url, HttpParams params,
//			final OnResponseListener<String> listener) {
//		sendAsyncRequest(Method.upload, url, params, listener);
//	}
//
//	/**
//	 * 下载文件请求
//	 * 
//	 * @param context
//	 *            当前上下文对象
//	 * @param url
//	 *            下载的网络链接
//	 * @param filePath
//	 *            下载文件本地存储路径
//	 * @param listener
//	 *            回调监听函数,onSuccess(String filePath) filePath 为下载文件的完整路径
//	 */
//	public void sendAsyncDownload(Context context, String url, String filePath,
//			OnResponseListener<String> listener) {
//		HttpParams params = new HttpParams();
//		params.setFilePath(filePath);
//		sendAsyncRequest(Method.download, url, params, listener);
//	}
//
//	public void sendAsyncRequest(HttpClientRequest request) {
//		if (request == null) {
//			return;
//		}
//		sendAsyncRequest(request.getType(), request.getUrl(),
//				request.getParams(), request.getListener());
//	}
//
//	/**
//	 * 异步方式发送http请求
//	 * 
//	 * @param type
//	 * @param url
//	 * @param header
//	 * @param httpParams
//	 * @param listener
//	 */
//	private void sendAsyncRequest(final Method type, final String url,
//			final HttpParams httpParams,
//			final OnResponseListener<String> listener) {
//		AsyncTask<String, Integer, HttpClientResponse> request = new AsyncTask<String, Integer, HttpClientResponse>() {
//
//			@Override
//			protected void onPreExecute() {
//
//			}
//
//			@Override
//			protected void onPostExecute(HttpClientResponse result) {
//				if (listener != null) {
//					if (result != null) {
//						if (result.getDownloadFile() != null) {
//							listener.onSuccess(result.getDownloadFile()
//									.getAbsolutePath());
//						} else {
//							listener.onSuccess(result.getContent());
//						}
//					} else {
//						listener.onFailure("获取数据失败");
//					}
//				}
//			}
//
//			@Override
//			protected void onProgressUpdate(Integer... values) {
//				if (listener != null) {
//					listener.onProgress(values[0]);
//				}
//			}
//
//			@Override
//			protected HttpClientResponse doInBackground(String... params) {
//				return executeRequest(type, url, mHeader, httpParams, listener);
//			}
//		};
//		request.execute(url);
//	}
//
//	/**
//	 * 数据请求
//	 * 
//	 * @param type
//	 * @param url
//	 * @param header
//	 * @param params
//	 * @param listener
//	 */
//	private HttpClientResponse executeRequest(Method type, String url,
//			Map<String, String> header, HttpParams params,
//			final OnResponseListener<String> listener) {
//		if (type == Method.download
//				&& !Environment.getExternalStorageState().equals(
//						Environment.MEDIA_MOUNTED)) {
//			return null;
//		}
//		if (type == Method.get) {
//			if (params != null) {
//				url += params.appendGetUrl();
//			}
//		}
//		HttpUriRequest request = null;
//		if (type == Method.get || type == Method.download) {
//			request = new HttpGet(url);
//		} else if (type == Method.post || type == Method.upload) {
//			request = new HttpPost(url);
//		}
//		if (request != null) {
//			if (header != null && header.size() > 0) {
//				Iterator<Map.Entry<String, String>> it = header.entrySet()
//						.iterator();
//				while (it.hasNext()) {
//					Map.Entry<String, String> entry = it.next();
//					request.addHeader(entry.getKey(), entry.getValue());
//				}
//			}
//			HttpEntity entity = null;
//			if (type == Method.post) {
//				entity = params.buildPostEntity();
//				if (entity != null) {
//					((HttpPost) request).setEntity(entity);
//				}
//			} else if (type == Method.upload) {
//				entity = params.buildUploadEntity();
//				if (entity != null) {
//					final long totalSize = entity.getContentLength();
//					ProgressOutHttpEntity progressHttpEntity = new ProgressOutHttpEntity(
//							entity,
//							new com.quick.android.handler.http.ProgressOutHttpEntity.ProgressListener() {
//								@Override
//								public void transferred(long transferedBytes) {
//									if (listener != null) {
//										listener.onProgress(transferedBytes
//												* 100d / totalSize);
//									}
//								}
//							});
//					((HttpPost) request).setEntity(progressHttpEntity);
//				}
//			}
//			HttpClientResponse result = new HttpClientResponse(url);
//			try {
//				HttpResponse response = mHttpClient.execute(request);
//				if (response != null) {
//					int code = response.getStatusLine().getStatusCode();
//					if (code == HttpStatus.SC_OK) {
//						if (listener != null) {
//							if (type == Method.download) {
//								if (Environment.getExternalStorageState()
//										.equals(Environment.MEDIA_MOUNTED)) {
//									result.writeFileData(params.getFilePath(),
//											response.getEntity(), listener);
//								}
//							} else {
//								result.setContent(EntityUtils.toString(
//										response.getEntity(), ENCODE));
//							}
//						}
//					}
//				}
//				return result;
//			} catch (ClientProtocolException e) {
//				e.printStackTrace();
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
//		}
//		return null;
//	}
//
//}
